package com.yuda.tools.log.controller;


import com.yuda.common.core.constant.HttpStatus;
import com.yuda.common.core.web.controller.BaseController;
import com.yuda.common.core.web.domain.AjaxResult;
import com.yuda.common.core.web.page.PageDomain;
import com.yuda.common.core.web.page.TableDataInfo;
import com.yuda.common.core.web.page.TableSupport;
import com.yuda.tools.log.entity.StuStatus;
import com.yuda.tools.log.service.StuStatusService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
public class StuStatusController extends BaseController {

    @Autowired
    private StuStatusService stuStatusService;


    @GetMapping("/seek")
    public TableDataInfo seek(@RequestParam(value = "kaodian",required = false) String kaodian,
                              @RequestParam(value = "jifang",required = false)String jifang,
                              @RequestParam(value = "subject",required = false)String subject,
                              @RequestParam(value = "zkznum",required = false)String zkznum,
                              @RequestParam(value = "quekao",required = false)String quekao,
                              @RequestParam(value = "lixian",required = false)String lixian) {


//        startPage();//分页,需要继承 BaseController
        List<StuStatus> list = stuStatusService.getInfo(kaodian, jifang, subject, zkznum,quekao,lixian);

        List<StuStatus> NewList = new ArrayList<>();

        for (StuStatus status : list) {
            //时间戳为 0 的 格式化为 1970-01-01 08:00:00 ，需要重新改为 0
            if(status.getStuStartTime().equals("1970-01-01 08:00:00")){
                status.setStuStartTime("0");
            }
            //时间戳为 1 的 格式化为 1970-01-01 08:00:01 ，需要重新改为 1
            else if(status.getStuStartTime().equals("1970-01-01 08:00:01")){
                status.setStuStartTime("1");
            }
            NewList.add(status);
        }

        int total = NewList.size();
        PageDomain pageDomain = TableSupport.buildPageRequest();
        Integer pageNum = pageDomain.getPageNum();
        Integer pageSize = pageDomain.getPageSize();
        int fromIndex = (pageNum-1)*pageSize;
        if (fromIndex > total){
            int yuShu = total % pageSize;
            NewList = NewList.subList(total-yuShu,total);
        }else {
            int toIndex = pageNum*pageSize;
            if (toIndex > total){
                toIndex = total;
            }
            NewList = NewList.subList(fromIndex,toIndex);
        }

        TableDataInfo rspData = new TableDataInfo();
        rspData.setCode(HttpStatus.SUCCESS);
        rspData.setRows(NewList);
        rspData.setMsg("查询成功");
        rspData.setTotal(total);
        return rspData;
    }


    //单独标记离线
    @GetMapping("/mark")
    public AjaxResult mark(@RequestParam(value = "zkzNum",required = true)String zkzNum,
                             @RequestParam(value = "subjectName",required = true)String subjectName){

        int i=0,j=0,k=0;
        StuStatus oneStuInfo = stuStatusService.getOneInfo(zkzNum,subjectName);

        //时间戳为 0 的 格式化为 1970-01-01 08:00:00 ，需要重新改为 0
        if(oneStuInfo.getStuStartTime().equals("1970-01-01 08:00:00")){
            oneStuInfo.setStuStartTime("0");
        }
        //时间戳为 1 的 格式化为 1970-01-01 08:00:01 ，需要重新改为 1
        else if(oneStuInfo.getStuStartTime().equals("1970-01-01 08:00:01")){
            oneStuInfo.setStuStartTime("1");
        }

        if (oneStuInfo.getStuStartTime().equals("0")) {
           if (oneStuInfo.getQuekao().equals("0")) {
               //未缺考，将开考时间置为“1”（已开考）   且离线状态置为“1”（离线）
               i = stuStatusService.updateStatus(zkzNum,subjectName);
           }else {
               //将开考时间置为“1”（已开考）     且离线状态置为“1”（离线）  缺考状态置为“0”（未缺考）
               j = stuStatusService.updateStatus1(zkzNum,subjectName);
           }
        }else {
            //保持开考时间不变,  离线状态置为“1”（离线）
            k= stuStatusService.updateStatus2(zkzNum,subjectName);
        }


        if(i == 0 && j == 0 && k == 0)
            return AjaxResult.success("操作失败");
        else
            return AjaxResult.success("操作成功");

    }

    //单独取消标记离线
    @GetMapping("/cancelMark")
    public AjaxResult cancelMark(@RequestParam(value = "zkzNum",required = true)String zkzNum,
                             @RequestParam(value = "subjectName",required = true)String subjectName){

        int i = 0 ,j = 0;
        StuStatus oneStuInfo = stuStatusService.getOneInfo(zkzNum,subjectName);

        //时间戳为 0 的 格式化为 1970-01-01 08:00:00 ，需要重新改为 0
        if(oneStuInfo.getStuStartTime().equals("1970-01-01 08:00:00")){
            oneStuInfo.setStuStartTime("0");
        }
        //时间戳为 1 的 格式化为 1970-01-01 08:00:01 ，需要重新改为 1
        else if(oneStuInfo.getStuStartTime().equals("1970-01-01 08:00:01")){
            oneStuInfo.setStuStartTime("1");
        }


        if (oneStuInfo.getStuStartTime().equals("1")) {
            //将开考时间置为“0”（未开考）   且离线状态置为“0”（未离线）
            i = stuStatusService.updateStatus3(zkzNum,subjectName);

        } else {
            //保持开考时间不变,  离线状态置为“0”（未离线）
            j = stuStatusService.updateStatus4(zkzNum,subjectName);

        }

        if(i == 0 && j == 0)
            return AjaxResult.success("操作失败");
        else
            return AjaxResult.success("操作成功");
    }


    //批量标记离线  (把选中的学生的zkzNum和subjectName拼成一个字符串)
    @PutMapping("/markAll")
    public AjaxResult markAll(@RequestBody List<StuStatus> list) {
        int result = 0;
//        ss = new String[]{"917457867310+语文","917457867310+文数"};
        for (StuStatus stuStatus : list) {
            String zkzNum = stuStatus.getZkzNum();
            String subjectName = stuStatus.getSubjectName();
            StuStatus oneStuInfo = stuStatusService.getOneInfo(zkzNum, subjectName);//根据zkzNum和subjectName获取全部信息

            //时间戳为 0 的 格式化为 1970-01-01 08:00:00 ，需要重新改为 0
            if(oneStuInfo.getStuStartTime().equals("1970-01-01 08:00:00")){
                oneStuInfo.setStuStartTime("0");
            }
            //时间戳为 1 的 格式化为 1970-01-01 08:00:01 ，需要重新改为 1
            else if(oneStuInfo.getStuStartTime().equals("1970-01-01 08:00:01")){
                oneStuInfo.setStuStartTime("1");
            }

            if (oneStuInfo.getStuStartTime().equals("0")) {
                if (oneStuInfo.getQuekao().equals("0")) {
                    //未缺考，将开考时间置为“1”（已开考）   且离线状态置为“1”（离线）
                    stuStatusService.updateStatus(zkzNum, subjectName);
                } else {
                    //将开考时间置为“1”（已开考）     且离线状态置为“1”（离线）  缺考状态置为“0”（未缺考）
                    stuStatusService.updateStatus1(zkzNum, subjectName);
                }
            } else {
                //保持开考时间不变,  离线状态置为“1”（离线）
                stuStatusService.updateStatus2(zkzNum, subjectName);
            }
            result = result + 1;

        }

        if(result != 0)
            return AjaxResult.success("操作成功");
        else
            return AjaxResult.success("操作失败");
    }

    //批量取消标记离线  (把选中的学生的zkzNum和subjectName拼成一个字符串)
    @PutMapping("/cancelMarkAll")
    public AjaxResult cancelMarkAll(@RequestBody List<StuStatus> list) {
        int result = 0;
        for (StuStatus stuStatus : list) {
            String zkzNum = stuStatus.getZkzNum();
            String subjectName = stuStatus.getSubjectName();

            StuStatus oneStuInfo = stuStatusService.getOneInfo(zkzNum, subjectName);//根据zkzNum和subjectName获取全部信息

            //时间戳为 0 的 格式化为 1970-01-01 08:00:00 ，需要重新改为 0
            if(oneStuInfo.getStuStartTime().equals("1970-01-01 08:00:00")){
                oneStuInfo.setStuStartTime("0");
            }
            //时间戳为 1 的 格式化为 1970-01-01 08:00:01 ，需要重新改为 1
            else if(oneStuInfo.getStuStartTime().equals("1970-01-01 08:00:01")){
                oneStuInfo.setStuStartTime("1");
            }


            if (oneStuInfo.getStuStartTime().equals("1")) {
                //将开考时间置为“0”（未开考）   且离线状态置为“0”（未离线）
                stuStatusService.updateStatus3(zkzNum, subjectName);

            } else {
                //保持开考时间不变,  离线状态置为“0”（未离线）
                stuStatusService.updateStatus4(zkzNum, subjectName);

            }
            result = result + 1;
        }

        if(result != 0)
            return AjaxResult.success("操作成功");
        else
            return AjaxResult.success("操作失败");
    }



    //模糊查询全部考点
    @GetMapping("/getKaodian/{kaodian}")
    public List<String> getKaodian(@PathVariable("kaodian") String kaodian){

        return stuStatusService.getKaodian(kaodian);

    }
    //模糊查询全部机房
    @GetMapping("/getJifang/{jifang}")
    public List<String> getJifang(@PathVariable("jifang") String jifang){

        return stuStatusService.getJifang(jifang);

    }
    //模糊查询全部科目
    @GetMapping("/getSubject/{subject}")
    public List<String> getSubject(){

        return stuStatusService.getSubject();

    }



    //标记离线
//    @GetMapping("/mark")
//    public AjaxResult lixian(@RequestParam(value = "kaodian",required = false) String kaodian,
//                             @RequestParam(value = "jifang",required = false)String jifang,
//                             @RequestParam(value = "subject",required = false)String subject,
//                             @RequestParam(value = "zkznum",required = false)String zkznum,
//                             @RequestParam(value = "quekao",required = false)String quekao,
//                             @RequestParam(value = "lixian",required = false)String lixian) {
//
//        List<StuStatus> stuInfoList = stuStatusService.getInfo(kaodian,jifang,subject,zkznum,quekao,lixian);
//
//
//        HashSet<String>  zkzNumList = new HashSet();
//        HashSet<String> subjectList = new HashSet();
//        for (int i=0;i<stuInfoList.size();i++) {
//            String zkzNum = stuInfoList.get(i).getZkzNum();
//            String Subject = stuInfoList.get(i).getSubjectName();
//            zkzNumList.add(zkzNum);
//            subjectList.add(Subject);
//        }
//
//        String[] zkzNum = zkzNumList.toArray(new String[zkzNumList.size()]);
//        String[] subjects = subjectList.toArray(new String[subjectList.size()]);
//
//        for (int i=0;i<stuInfoList.size();i++) {
//                if (stuInfoList.get(i).getStuStartTime().equals("0")) {
//                    if (stuInfoList.get(i).getQuekao().equals("0")) {
//                        //未缺考，将开考时间置为“1”（已开考）   且离线状态置为“1”（离线）
//                        stuStatusService.updateStatus(subjects,zkzNum);
//                        return AjaxResult.success("操作成功");
//                    }else {
//                        //将开考时间置为“1”（已开考）     且离线状态置为“1”（离线）  缺考状态置为“0”（未缺考）
//                        stuStatusService.updateStatus1(subjects,zkzNum);
//                        return AjaxResult.success("操作成功");
//                }
//                }else {
//                    //保持开考时间不变,  离线状态置为“1”（离线）
//                    stuStatusService.updateStatus2(subjects,zkzNum);
//                    return AjaxResult.success("操作成功");
//            }
//        }
//        return AjaxResult.error("操作失败");
//    }




    //批量标记离线  (把选中的学生的zkzNum和subjectName拼成一个字符串)
//    @GetMapping("/markAll")
//    public AjaxResult markAll(@RequestParam(value = "ss")String[] ss) {
//        int result = 0;
////        ss = new String[]{"917457867310+语文","917457867310+文数"};
//        for (String s : ss) {
//            int indexOf = s.indexOf('#');
//            String zkzNum = s.substring(0, indexOf);
//            String subjectName = s.substring(indexOf + 1);
//            StuStatus oneStuInfo = stuStatusService.getOneInfo(zkzNum, subjectName);//根据zkzNum和subjectName获取全部信息
//            if (oneStuInfo.getStuStartTime().equals("0")) {
//                if (oneStuInfo.getQuekao().equals("0")) {
//                    //未缺考，将开考时间置为“1”（已开考）   且离线状态置为“1”（离线）
//                    stuStatusService.updateStatus(zkzNum, subjectName);
//                } else {
//                    //将开考时间置为“1”（已开考）     且离线状态置为“1”（离线）  缺考状态置为“0”（未缺考）
//                    stuStatusService.updateStatus1(zkzNum, subjectName);
//                }
//            } else {
//                //保持开考时间不变,  离线状态置为“1”（离线）
//                stuStatusService.updateStatus2(zkzNum, subjectName);
//            }
//            result = result + 1;
//        }
//
//        if(result != 0)
//            return AjaxResult.success("操作成功");
//        else
//            return AjaxResult.success("操作失败");
//    }



}
